package letcode.oneQuestionPerDay._202003._20200306;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/*
和为s的连续整数序列
 */
public class TotalIsSSeqence {
    public static void main(String[] args) {
        int target=15;
        int[][] res=findContinuousSequence(target);
        for (int i = 0; i < res.length; i++) {
            System.out.printf("[");
            for (int j = 0; j < res[i].length; j++) {
                System.out.printf("%d,",res[i][j]);
            }
            System.out.printf("],");
        }
    }
    //提供方法 官方题解：滑动窗口
    public static int[][] findContinuousSequence(int target) {
        int i=1,j=1; //左右边界
        int sum=0; //滑动窗口的和

        List<int[]> list=new ArrayList<>();

        while (i<=target/2){
            if (sum<target){
                sum+=j;
                j++;
            }else if (sum>target){
                sum-=i;
                i++;
            }else {
                int[] arr=new int[j-i];
                for (int k = i; k < j; k++) {
                    arr[k-i]=k;

                }
                list.add(arr);
                //左边界向右移动
                sum-=i;
                i++;
            }
        }
        return list.toArray(new int[list.size()][]);
    }

}
/*
输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
示例 1：
输入：target = 9
输出：[[2,3,4],[4,5]]
示例 2：
输入：target = 15
输出：[[1,2,3,4,5],[4,5,6],[7,8]]
限制：
1 <= target <= 10^5

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */